<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <script>
    let promise = new Promise();
    promise
      .then(res => {})
      .catch(err => {})
      .finally(() => {})  // 不管promise最后的状态，该回调函数都会执行

      /*
       * finally方法的回调函数不接受任何参数
       * finally方法里面的操作，应该是与状态无关的，不依赖于 Promise 的执行结果
       *
       * finally方法本质上是then方法的特例
       */
      promise.finally(() => {})
      // 等同于
      promise.then(res => {return res}, err => {throw err})

      // 实现
      Promise.prototype.finally = function (callback) {
        let P = this.constructor;
        return this.then(
          value => P.resolve(callback()).then(() => value),
          reason => P.resolve(callback()).then(() => {throw reason})
        )
      }
      // 不管前面的 Promise 是fulfilled还是rejected，都会执行回调函数callback。
  </script>

</head>
<body>
  
</body>
</html>